<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>this</title>
<body>
    <script>
    //   对象中的this  就是当前对象
    //   setTimeout 和setInterval this指代 window对象
    //   this 是在函数执行的时候动态确定，window.setTimeout 全称
    //   箭头函数this取上一级作用域的this
    const zhan = {
        name:"张三",
        sayHi(){
            console.log(this);
        },
        wait(){
            setTimeout(function(){
                console.log(this,"wait");
            },100)
        },
        wait2(){
            setTimeout(()=>{
                console.log(this,"箭头函数");
            },100)
        }
    }
    zhan.sayHi();
    zhan.wait();
    zhan.wait2();

    class People{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        sayHi(){
            console.log(this);
        }
    }
    // 创建两个实例
    var p1 = new People("mumu",12);
    var p2 = new People("曾庆林",18);

    p1.sayHi();
    p2.sayHi();
    // 在类中的this 指代当前类的实例
    // call，apply ,bind 中的this 指代 函数第一参数
    // 对象中的this  指代 当前对象
    // setTimeout setInterval中this window
    // 箭头函数中this 指代上一级作用域this
    // 普通函数this 指代的是 window
    
    </script>

</body>
</html>